模拟按钮单击事件

BOOL CMyDlg::OnInitDialog()

{

CDialog::OnInitDialog();

HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄

HWND hwnd2=::GetDlgItem(hWnddlg,IDC_BUTTON1);//子窗口(或控件)句柄

::SendMessage(hwnd2,WM_LBUTTONDOWN,0,0);

::SendMessage(hwnd2,WM_LBUTTONUP,0,0);

……

}

自动向打开的记事本文件中输入一个字母

//需要先打开记事本

int main()

{

HWND hWnd = ::FindWindowW(L"Notepad",NULL); //搜索记事本程序主窗口句柄

HWND hWndc = ::GetWindow(hWnd,GW_CHILD); //获得记事本客户区句柄(该窗口是记事本主窗口的子窗口,即那个白色的可编辑区域) 。

if(hWndc) //如果获得了该句柄

::SendMessage(hWndc,WM_CHAR,'A',NULL);//发送按键消息

system("pause");

return 0;

}

2

建立了一个tab控件 添加了5个标签页

每个标签页添加一个child对话框

每个对话框添加一个类dlg1至dlg5

程序中的非对话框类 会向某个对话框发送消息

怎么才能获得child对话框的句柄呢?

有人说 创建的时候把句柄保存下来 我是新手 请问用什么语句保存?

CDialog::Create创建成功了.

HWND hwnd=dlg1.m_hwnd;这个就是窗口的句柄了.

亲谢谢你 成功了 解决了我很大的困扰 我设置全局变量保存句柄了。

3

你m_tabPage1.Create()完成以后,直接调用m_tabPage1.GetSafeHwnd()传递给m_SerialPort.InitPort(...);函数不就行了吗?

如果需要port将消息发送到m_tabPage1和m_tabPage2的话,可以直接传递主窗口的HWND,port先发消息到主窗口,主窗口再中转消息到page1和page2。

按你说的方法成功了,谢谢!我还是基础太差了

4

1. 在对话框·Dlg.cpp文件顶部定义窗口句柄全局变量

HWND m_ShowHistoryDlgWnd ;

2. 在对话框初始化函数,添加句柄获得

BOOL CShowHistoryDlg::OnInitDialog()

……

m_ShowHistoryDlgWnd = this->m_hWnd ;

……

3. 在引用的.cpp的文件顶部定义引用

extern HWND m_ShowHistoryDlgWnd;

4. 可以在该文件中直接引用即可

�?/a>
�?/a>
�?/a>